在過去強化學習的專案裡面,如何制定一個環境與演算法的界面,是一個很重要的事情,也因為這種概念的普及,規範化後的邏輯應用,才能讓相同性質的應用能更好拓展與快速上手。Open Gym 過去就扮演這個角色,不過如今專案的維護也從原本的 gym 轉為 gymnasium,如果對過去有興趣可以參考過去文章→ Day_4 環境介紹-gym
第一步我們先來安裝套件
pip install gymnasium
pip install "gymnasium[all]"
在安裝 gymnasium[all] 的時候可能會遇到swig的問題,遇到的話就照電腦的作業系統,照著這篇,走相應的安裝指令就好。
我們來直接看 gymnasium 所提供了例子
import gymnasium as gym
env = gym.make("LunarLander-v2", render_mode="human")
observation, info = env.reset(seed=42)
for _ in range(1000):
action = env.action_space.sample() # this is where you would insert your policy
observation, reward, terminated, truncated, info = env.step(action)
if terminated or truncated:
observation, info = env.reset()
env.close()
基本上跟過去的使用差不多,當然不太可能會大概,如果是可以也就不會延伸使用 gymnasium 這個名字了。
跟 gym 差異性主要有三個
Done 改成 terminated, truncated
前者是遊戲真正完成時候給的 done, 後者是超時,超過指定的步伐時給的 done,至於限制的步伐設置,可以用 gym.wrappers.TimeLimit 去設定。
gym.get_action_meanings
env 可以使用 get_action_meanings 方法,來獲得文字敘述,例如像可能原本 0 代表左邊, 1 代表右邊,該方法則會返回 [’left’, ‘right’] 但有些經典的遊戲沒有支援,像是 LunarLander
rendor_mode
以前是用 def render(self, mode="human") 的方法去控制,要用畫面看還是只返回rpg_array ,現在則是要在 gym的初始化設定這件事情,預設則為 render_mode=”rpg_array”
初學者可能會有些空虛,覺得好像沒改什麼重大改變,我個人覺得穩定的東西,可能就沒更好的方法。換個說法應該是,的確強化學習的場景應該會需要更複雜的設定,所以 gym.wrappers 提供的方法都很強大且方便,所以最底層 base 的東西當然越簡單越好。
那筆者自己是覺得,第一點 Done 改成 terminated, truncated,蠻不錯的,雖然切出兩個變數反而有點冗贅,但我覺得已研究角度來講,究竟是完成,還是超時,這兩個差異超重要的,不過讀者可以先別管這麼多,就把它想成 done 的兩個版本就好。